/*
 * @(#)SysDicController.java v2.0 2016年11月22日
 * 百联集团	版权所有
 * 
 * 文件描述...
 *
 * @Title: SysDicController.java 
 * @Package com.bailiangroup.gsp.oms.controller 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0
 * 历史版本：
 * 	1. 【2016年11月22日】 创建文件   by tylong
 */
package com.ess.web.controller.sys;


import com.bailian.pagehelper.PageInfo;
import com.blgroup.b2b.common.constant.SysMessage;
import com.blgroup.b2b.common.entity.MessageResultInfo;
import com.blgroup.b2b.common.entity.TableInfo;
import com.blgroup.b2b.common.model.SysDic;
import com.blgroup.b2b.web.dto.*;
import com.blgroup.b2b.web.service.sys.SysDicService;
import com.blgroup.b2b.web.util.BeanUtils;
import com.ess.web.controller.base.BaseController;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

/** 
 * 字典Controller
 * 
 * @ClassName: SysDicController 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0 
 *  
 */
@Controller
@RequestMapping(value = "/sys")
public class SysDicController extends BaseController {

	/**
	 * 日志变量
	 */
	static final Logger logger = LoggerFactory.getLogger(SysDicController.class);
	/**
	 * 字典service
	 */
	@Autowired
	SysDicService sysDicService;
	/**
	 * 
	 * 方法描述：   删除字典
	 * 业务逻辑说明  ：删除字典 
	 * 1、根据唯一主键删除<br/>
	 * @Title: deleteSysDic 
	 * @date 2016年11月22日 下午8:31:28
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequiresPermissions("dic:deleteSysDic")
	@RequestMapping(value = "/deleteSysDic", method = RequestMethod.POST)
	public Object deleteSysDic(@Valid @ModelAttribute("dto") DeleteSysDicReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			//删除字典
			resultInfo=sysDicService.deleteSysDic(dto);
		} catch (Exception e) {
			logger.error("删除字典失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("删除字典失败");
		}
		return resultInfo;
	}
	/**
	 * 
	 * 方法描述：   添加字典
	 * 业务逻辑说明  ：添加字典 
	 * 1、参数校验<br/>
	 * @Title: addSysDic 
	 * @date 2016年11月22日 下午8:32:18
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequiresPermissions("dic:addSysDic")
	@RequestMapping(value = "/addSysDic", method = RequestMethod.POST)
	public Object addSysDic(@Valid @ModelAttribute("dto") AddSysDicReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			BeanUtils.convertEmptyStringToNull(dto);
			dto.setCreateUser(request.getSession().getAttribute("userId").toString());
			resultInfo=sysDicService.addSysDic(dto);
		} catch (Exception e) {
			logger.error("新增字典失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("新增字典失败");
		}
		return resultInfo;
	}
	/**
	 * 
	 * 方法描述：   更新字典
	 * 业务逻辑说明  ：更新字典
	 * 1、参数校验<br/>
	 * 2、字典值不可更改<br/>
	 * @Title: updateSysDic 
	 * @date 2016年11月22日 下午8:33:19
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequiresPermissions("dic:updateSysDic")
	@RequestMapping(value = "/updateSysDic", method = RequestMethod.POST)
	public Object updateSysDic(@Valid @ModelAttribute("dto") UpdateSysDicReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			dto.setUpdateUser(request.getSession().getAttribute("userId").toString());
			resultInfo=sysDicService.updateSysDic(dto);
		} catch (Exception e) {
			logger.error("更新字典失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("更新字典失败");
		}
		return resultInfo;
	}

	/**
	 * 
	 * 方法描述：   查询字典列表
	 * 业务逻辑说明  ：查询字典列表 
	 * @Title: querySysDic 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequiresPermissions("dic:querySysDic")
	@RequestMapping(value="/querySysDic",method=RequestMethod.GET)
	public ModelAndView querySysDic(@Valid @ModelAttribute("dto") QuerySysDicReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		//查询用户列表
		ModelAndView mv=new ModelAndView("sys/sysDicList");
		try {
			if(StringUtils.isEmpty(dto.getOrderBy())){
				dto.setOrderBy("UPDATE_DATE desc");
			}
			BeanUtils.convertEmptyStringToNull(dto);
			PageInfo<SysDic> pageInfo=sysDicService.querySysDic(dto);
			//convertUserIdToUserName(pageInfo.getList());
			model.addAttribute("pageInfo", pageInfo);
			mv.addObject("tabId", "querySysDic");
			mv.addObject(pageInfo);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return mv;
	}
	
	/**
	 * 
	 * 方法描述：   异步查询字典列表
	 * 业务逻辑说明  ： 异步查询字典列表 
	 * @Title: querySysDicAjax 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/querySysDicAjax",method=RequestMethod.POST)
	@ResponseBody
	public Object querySysDicAjax(@Valid @ModelAttribute("dto") QuerySysDicReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		//查询用户列表
		PageInfo<SysDic> pageInfo=new PageInfo<SysDic>();
		try {
			BeanUtils.convertEmptyStringToNull(dto);
			dto.setIsPage("0");
			pageInfo=sysDicService.querySysDic(dto);
			return pageInfo;
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return pageInfo;
	}
	/**
	 * 
	 * 方法描述：   跳转添加字典页面
	 * 业务逻辑说明  ：跳转添加字典页面
	 * @Title: queryUserById 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequiresPermissions("dic:addSysDic")
	@RequestMapping(value="/toSysDicAdd",method=RequestMethod.GET)
	public ModelAndView toSysDicAdd(@ModelAttribute("dto") AddSysDicReqDto dto,HttpServletRequest request) {
		// 跳转添加字典页面
		ModelAndView  mv=new ModelAndView("sys/sysDicAdd") ;
		mv.addObject("tabId", "sysDicAdd");
		return mv;
	}
	
	/**
	 * 
	 * 方法描述：   跳转编辑字典页面
	 * 业务逻辑说明  ：跳转编辑字典页面
	 * @Title: toSysDicUpdate 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequiresPermissions("dic:updateSysDic")
	@RequestMapping(value="/toSysDicUpdate",method=RequestMethod.GET)
	public ModelAndView toSysDicUpdate(@ModelAttribute("dto") QuerySysDicReqDto dto,HttpServletRequest request) {
		// 跳转编辑字典页面
		ModelAndView  mv=new ModelAndView("sys/sysDicUpdate");
		try {
			BeanUtils.convertEmptyStringToNull(dto);
			PageInfo<SysDic> pageInfo=sysDicService.querySysDic(dto);
			mv.addObject("tabId", "sysDicUpdate");
			mv.addObject("dto",pageInfo.getList().get(0));
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return mv;
	}
	
	/**
	 * 
	 * 方法描述：   查询表名
	 * 业务逻辑说明  ：查询表名
	 * @Title: queryTableNameAjax 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/queryTableNameAjax",method=RequestMethod.POST)
	public Object queryTableNameAjax(@ModelAttribute("dto") QueryTableInfoReqDto dto, HttpServletRequest request) {
		PageInfo<TableInfo> pageInfo=new PageInfo<TableInfo>();
		try {
			//将T_NGSP_SYS_DIC排除
			dto.setExcludeTableName("T_NGSP_SYS_DIC");
			BeanUtils.convertEmptyStringToNull(dto);
			dto.setIsPage("0");
			pageInfo=sysDicService.queryTableName(dto);
			return pageInfo;
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return pageInfo;
	}
	
	/**
	 * 
	 * 方法描述：   查询表列表
	 * 业务逻辑说明  ：查询表列表 
	 * @Title: queryTableColumnAjax 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/queryTableColumnAjax",method=RequestMethod.POST)
	public Object queryTableColumnAjax(@ModelAttribute("dto") QueryTableInfoReqDto dto, HttpServletRequest request) {
		PageInfo<TableInfo> pageInfo=new PageInfo<TableInfo>();
		try {
			BeanUtils.convertEmptyStringToNull(dto);
			dto.setIsPage("0");
			pageInfo=sysDicService.queryTableColumn(dto);
			return pageInfo;
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return pageInfo;
	}
}
